package com;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import java.util.List;

/**
 * 使用DOM4J解析XML文档
 * DOM(Document Object Model)文档对象模型
 * DOM解析模式为先将xml文档按照清标签包好的结构转换为一个树状结构数据
 * 似的我们在获取xml文档内容改为遍历树结构完成
 */
public class ParaseDemo {
    public static void main(String[] args) {
        /*
        解析XML的大致步骤
        1：创建SAXReader
        2：使用SAXReader读取xml文档并产生Document对象
        这一步的作用就是DOM解析模式中现将xml文档读取并构建整棵树结构的过程
        3：通过Document对象获取根元素（就是xml中的根标签内容）
        4：从根元素开始逐级获取子元素，以达到解析XML文档内容的目的
         */
        //1
        SAXReader reader=new SAXReader();
        //2
        try {
            Document doc=reader.read("./emplist.xml");
           // Document doc=reader.read(new File("./emplist.xml"));
           // Document doc=reader.read(new FileInputStream("./emplist.xml"));
            /*
            3
            Document对象提供了获取根元素的方法：
            Element getRootElement（）


            Element的每一个实力用于表示XML文档上的一个元素（一对标签）
            其提供了获取xml元素信息的相关方法，常用的有：
            String getName（）
            获取元素名（标签名）


            String getText（）
            获取文本（开始与结束标签之间的文本信息）

            String elementText(String name)
            获取当前元素下指定名字的子元素中间的文本
            String s=e.element("xxx").getText();
            等同于
            String s=e.elementTxet("xxx")


            Element element（String name）
            获取当前元素中指定名字的子元素



            List anbulelements（）
            获取当前元素下的所有子元素


            Listanbulelemen（String name）
            获取当前元素下所有给定的名字的同名子元素
             */
             Element root=doc.getRootElement();
             String name=root.getName();
            System.out.println("根标签："+name);
            //获取根标签<list>下所有名为<emp>的子标签
            List<Element> list=root.elements("emp");
            System.out.println(list.size());

            //遍历每一个<emp>标签来获取员工信息
            for (Element empEle:list){
                //获取员工姓名
                //通过<emp>获取子标签<name>
                Element nameEle=empEle.element("name");
                //获取<name>标签中间的文本
                String ename=nameEle.getText();
                int age=Integer.parseInt(empEle.element("age").getText());
                String gender=empEle.elementText("gender");
                int salary=Integer.parseInt(empEle.elementText("salary"));
                //获取工号
                //通过<emp>获取属性:"id"
               // Attribute attr=empEle.attribute("id");
                //获取id属性的值
                //int id=Integer.parseInt(attr.getValue());
                //int id=Integer.parseInt(empEle.attribute("id").getValue());
                int id=Integer.parseInt(empEle.attributeValue("id"));

                System.out.println(id+","+ename+","+age+","+gender+","+salary);
            }

        } catch (DocumentException e) {
            e.printStackTrace();
        }
    }
}
